home *** CD-ROM | disk | FTP | other *** search
/ The CICA Windows Explosion! / The CICA Windows Explosion! - Disc 2.iso / programr / appsrcs.zip / APPUN.ZIP / APPRUN.C < prev    next >
C/C++ Source or Header  |  1993-05-06  |  7KB  |  234 lines

  1. /*-------------------------------------------------------------------------
  2.  AppRun.c
  3.  
  4.  A File run utility for AppBar.
  5.  
  6.  by
  7.  GMP van kempen
  8.  NEVERnever Software 1993
  9.  
  10. History:
  11. 4.00.1 First Beta release
  12.  
  13. 4.00.2 Added Minimized/Normal/Maximized Buttons. Changed handling of command
  14.        line parameters. Is now used as initial executable string. Fixed some
  15.        small bugs.
  16. 4.00.3 Increased vertical size of editbox.
  17.  
  18. ---------------------------------------------------------------------------*/
  19. //compile with the strictest error checking
  20. #define STRICT
  21. #include <windows.h>
  22. #include <windowsx.h>
  23. #include <shellapi.h>
  24. #include <ctl3d.h>
  25. #include "apprun.h"
  26.  
  27. #define MAKECHILD(a,b,c,d,e,f,g,h) CreateWindow(a,b,WS_CHILD | WS_VISIBLE | c,d,e,f,g,hWnd,h,hInst,(LPSTR) NULL)
  28. #define MAKEBUTTON(a,b,c,d,e,f)    MAKECHILD("button",a,BS_PUSHBUTTON,b,c,d,e,f)
  29. #define MAKEDEFBUTTON(a,b,c,d,e,f)    MAKECHILD("button",a,BS_DEFPUSHBUTTON,b,c,d,e,f)
  30. #define MAKERADIO(a,b,c,d,e,f)       MAKECHILD("button",a,BS_RADIOBUTTON,b,c,d,e,f)
  31. #define MAKETEXT(a,b,c,d,e)       MAKECHILD("static",a,SS_LEFT,b,c,d,e,(HMENU) -1)
  32. #define MAKESTATIC(a,b,c,d)       MAKECHILD("static",NULL,SS_BLACKRECT,a,b,c,d,(HMENU) -1)
  33. #define MAKEBORDER(a,b,c,d)       MAKECHILD("static",NULL,SS_WHITERECT,a,b,c,d,(HMENU) -1)
  34. #define MAKEEDIT(a,b,c,d,e)       MAKECHILD("edit", "  ",WS_BORDER | ES_LEFT | ES_AUTOHSCROLL | ES_LOWERCASE,a,b,c,d,e)
  35.  
  36. char        szAppName[] = "AppRun";
  37. HINSTANCE   hInst;
  38. HWND        hWndEdit;
  39. UINT        ProgShow = SW_SHOWNORMAL;
  40. int        radiocheck = 1;
  41. HWND        hWndButton[3], hWndRadio[3];
  42. FARPROC     lpfnOldEdit;
  43.  
  44.  
  45. int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
  46.            LPSTR lpszCmdLine, int nCmdShow)
  47.     {
  48.     HWND    hWnd;
  49.     MSG     msg;
  50.     WNDCLASS    wndclass;
  51.     int     xScreen, yScreen, yCaption, xSize, ySize;
  52.  
  53.     if(!hPrevInstance)
  54.     {
  55.     wndclass.style            = CS_HREDRAW | CS_VREDRAW;
  56.     wndclass.lpfnWndProc        = WndProc;
  57.     wndclass.cbClsExtra        = 0;
  58.     wndclass.cbWndExtra        = 0;
  59.     wndclass.hInstance        = hInstance;
  60.     wndclass.hIcon            = LoadIcon(hInstance, szAppName);
  61.     wndclass.hCursor        = LoadCursor(NULL, IDC_ARROW);
  62.     wndclass.hbrBackground        = GetStockBrush(LTGRAY_BRUSH);
  63.     wndclass.lpszMenuName        = NULL;
  64.     wndclass.lpszClassName        = szAppName;
  65.  
  66.     RegisterClass(&wndclass);
  67.     }
  68.  
  69.     hInst = hInstance;
  70.  
  71.     lstrcpy(szBuffer, lpszCmdLine);
  72.     if(!strlen(szBuffer))
  73.     szBuffer[0] = '\0';
  74.  
  75.     xScreen = GetSystemMetrics(SM_CXSCREEN);
  76.     yScreen = GetSystemMetrics(SM_CYSCREEN);
  77.     yCaption = GetSystemMetrics(SM_CYCAPTION);
  78.  
  79.     Ctl3dRegister(hInstance);
  80.     Ctl3dAutoSubclass(hInstance);
  81.  
  82.     xSize = 280;
  83.     ySize = 139 + yCaption;
  84.  
  85.  
  86.     hWnd = CreateWindow(szAppName, "AppRun 4.0",
  87.             WS_POPUP | WS_SYSMENU | WS_CAPTION |
  88.             WS_MINIMIZEBOX | WS_VISIBLE,
  89.             (xScreen - xSize)/2, yScreen/2 - ySize,
  90.             xSize, ySize,
  91.             NULL, (HMENU) NULL, hInstance, NULL);
  92.  
  93.     ShowWindow(hWnd, SW_SHOWNORMAL);
  94.     UpdateWindow(hWnd);
  95.  
  96.     while(GetMessage(&msg, NULL, 0, 0))
  97.     {
  98.     TranslateMessage(&msg);
  99.     DispatchMessage(&msg);
  100.     }
  101.  
  102.     Ctl3dUnregister(hInstance);
  103.  
  104.     return msg.wParam;
  105.     } /* end WinMain */
  106.  
  107. /*------------------------------------------------------------------------/
  108.    FUNCTION: WndProc()
  109. /------------------------------------------------------------------------*/
  110. long WINAPI WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  111.     {
  112.     char *Button[3] = {"&Cancel","&OK","&Browse"};
  113.     char *Radio[3] = {"&Minimize","&Normal","M&aximize"};
  114.     char EditBox[256];
  115.     int i, DroppedFiles;
  116.     HBRUSH hbrush;
  117.  
  118.     switch (message)
  119.     {
  120.     case WM_CREATE:
  121.         // create static frame around text fields
  122.         Ctl3dSubclassCtl(MAKEBORDER(0, 0, 278, 138));
  123.         Ctl3dSubclassCtl(MAKESTATIC(9, 9, 262, 88));
  124.         hWndButton[0] = MAKEBUTTON(Button[0], 20, 106, 80, 24, IDC_BUTTONS);
  125.         hWndButton[1] = MAKEBUTTON(Button[1], 100, 106, 80, 24, IDC_BUTTONS+1);
  126.         hWndButton[2] = MAKEBUTTON(Button[2], 180, 106, 80, 24, IDC_BUTTONS+2);
  127.         hWndRadio[0] = MAKERADIO(Radio[0], 15, 70, 80, 24, IDC_RADIO);
  128.         hWndRadio[1] = MAKERADIO(Radio[1], 105, 70, 75, 24, IDC_RADIO+1);
  129.         hWndRadio[2] = MAKERADIO(Radio[2], 180, 70, 85, 24,IDC_RADIO+2);
  130.         for(i=0;i<3;i++)
  131.         Ctl3dSubclassCtl(hWndRadio[i]);
  132.         Ctl3dSubclassCtl(MAKETEXT("Program:", 20, 16, 100, 20));
  133.         hWndEdit = MAKEEDIT(20, 38, 240, 28, IDC_EDIT);
  134.         Ctl3dSubclassCtl(hWndEdit);
  135.         lpfnOldEdit = (FARPROC) GetWindowLong(hWndEdit, GWL_WNDPROC);
  136.         SetWindowLong(hWndEdit, GWL_WNDPROC,
  137.           (LONG) MakeProcInstance( (FARPROC) EditProc,
  138.           (HINSTANCE) GetWindowWord(hWnd, GWW_HINSTANCE)));
  139.         Edit_SetText(hWndEdit, szBuffer);
  140.         UpdateRadioButtons(radiocheck);
  141.         DragAcceptFiles(hWnd, TRUE);
  142.         SetFocus(hWndEdit);
  143.         return 0;
  144.  
  145.     case WM_SYSCOLORCHANGE:
  146.            Ctl3dColorChange();
  147.        break;
  148.  
  149.     case WM_CTLCOLOR:
  150.         hbrush = Ctl3dCtlColorEx(message, wParam, lParam);
  151.         if(hbrush != (HBRUSH) FALSE)
  152.         return hbrush;
  153.         else
  154.         return DefWindowProc(hWnd, message, wParam, lParam);
  155.  
  156.        case WM_DROPFILES:
  157.         DroppedFiles = DragQueryFile((HANDLE) wParam, 0xFFFF, (LPSTR) NULL, 0);
  158.         for(i=0;i<DroppedFiles;i++)
  159.         {
  160.         DragQueryFile((HANDLE) wParam, i, szBuffer, sizeof(szBuffer));
  161.         WinExec(szBuffer, SW_SHOWNORMAL);
  162.         }
  163.         DragFinish((HANDLE) wParam);
  164.         return 0;
  165.  
  166.        case WM_COMMAND:
  167.         switch(wParam)
  168.         {
  169.         case IDC_EDIT:
  170.             if(HIWORD(lParam) == EN_KILLFOCUS)
  171.             Edit_GetText(hWndEdit, EditBox, 255);
  172.             break;
  173.  
  174.         case IDC_BUTTONS:  /* Cancel */
  175.             SendMessage(hWnd, WM_DESTROY, 0, 0);
  176.             break;
  177.  
  178.         case IDC_BUTTONS+1:  /* Ok */
  179.             Edit_GetText(hWndEdit, EditBox, 255);
  180.             if(WinExec(EditBox, ProgShow) > 32)
  181.             SendMessage(hWnd, WM_DESTROY, 0, 0);
  182.             break;
  183.  
  184.         case IDC_BUTTONS+2: /* Browse */
  185.             if(BrowseFile(hWnd, EditBox))
  186.             Edit_SetText(hWndEdit, EditBox);
  187.             SetFocus(hWndEdit);
  188.             break;
  189.  
  190.         case IDC_RADIO: /* Minimized */
  191.             radiocheck = 0;
  192.             UpdateRadioButtons(0);
  193.             ProgShow = SW_SHOWMINIMIZED;
  194.             //SetFocus(hWndEdit);
  195.             break;
  196.  
  197.         case IDC_RADIO+1: /* Normal */
  198.             radiocheck = 1;
  199.             UpdateRadioButtons(1);
  200.             ProgShow = SW_SHOWNORMAL;
  201.             //SetFocus(hWndEdit);
  202.             break;
  203.  
  204.         case IDC_RADIO+2: /* Maximized */
  205.             radiocheck = 2;
  206.             UpdateRadioButtons(2);
  207.             ProgShow = SW_SHOWMAXIMIZED;
  208.             //SetFocus(hWndEdit);
  209.             break;
  210.         }
  211.         break;
  212.  
  213.        case WM_DESTROY:    // kill the whole program
  214.         DragAcceptFiles(hWnd, FALSE);
  215.         PostQuitMessage(0);
  216.         return 0;
  217.     }
  218.     return DefWindowProc(hWnd, message, wParam, lParam);
  219.     } /* end WndProc */
  220.  
  221. /*--------------------------------------------------------------------------*/
  222. VOID UpdateRadioButtons(int iCurrentRB)
  223.     {
  224.     int i;
  225.  
  226.     for(i=0;i<3;i++)
  227.     {
  228.     if(i != iCurrentRB)
  229.         Button_SetCheck(hWndRadio[i], 0);
  230.     else
  231.         Button_SetCheck(hWndRadio[i], 1);
  232.     }
  233.     }
  234.